package com.atguigu.teach.mytask;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

/**
 * @name:
 * @params:
 * @description:
 * CyclicBarrier 的字面意思是可循环的 Cyclic 使用的屏障，他要做的事情是
 * 让一组线程到达一个屏障（也可以叫做同步点）时被阻塞，
 * 直到最后一个线程到达屏障时，屏障才会开门，所有被屏障拦截的线程才会继续干活
 * 线程进入屏障通过CyclicBarrier的await（）方法
 * @return:
 * @exception/throws:
 * @author: zxb
 * @date:   2021/10/23
 */
public class MyBarrierDemo {
    public static void main(String[] args) {
        //初始化，runnable接口
        CyclicBarrier cyclicBarrier=new CyclicBarrier(7,
                ()-> System.out.println("----召唤神龙"));

        for (int i = 1; i <=7 ; i++) {
            int finalI=i;
            new Thread(()->{
                System.out.println(Thread.currentThread().getName()+"\t"+"收集到了"+finalI+"龙珠");
                try {
                    //每等一次自动加一，等了7次之后就放行
                    cyclicBarrier.await();
                } catch (InterruptedException | BrokenBarrierException e) {
                    e.printStackTrace();
                }
            },String.valueOf(i)).start();
        }
    }
}
